{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d69cfa6a-04b4-493b-a7ea-2404786b84ec",
   "metadata": {},
   "source": [
    "# Die rolling in Notebooks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "db526094-a189-4d6f-a462-a21744a26f8c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:12:23.893008Z",
     "iopub.status.busy": "2023-06-23T03:12:23.892785Z",
     "iopub.status.idle": "2023-06-23T03:12:25.206350Z",
     "shell.execute_reply": "2023-06-23T03:12:25.205995Z",
     "shell.execute_reply.started": "2023-06-23T03:12:23.892994Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6f0517e3-1629-4c7d-b465-6dab98a30729",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:12:25.206913Z",
     "iopub.status.busy": "2023-06-23T03:12:25.206775Z",
     "iopub.status.idle": "2023-06-23T03:12:25.209010Z",
     "shell.execute_reply": "2023-06-23T03:12:25.208518Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.206904Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# This will get us in trouble later\n",
    "N_SIDES = 6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "490cc071-4413-4706-962e-88dc26595768",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:12:25.209628Z",
     "iopub.status.busy": "2023-06-23T03:12:25.209529Z",
     "iopub.status.idle": "2023-06-23T03:12:25.211813Z",
     "shell.execute_reply": "2023-06-23T03:12:25.211406Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.209619Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# We can now define a function in here, that can be used in future cells\n",
    "def roll_n_dice(n_dice: int) -> int:\n",
    "    \"\"\"Rolls N six-sided die and returns the total rolled\"\"\"\n",
    "    # Warning -- this will lead us into danger!\n",
    "    rolls = [random.randint(1, N_SIDES) for _ in range(n_dice)]\n",
    "    return sum(rolls)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1807a894-79c4-45fe-b165-521dd10612e4",
   "metadata": {},
   "source": [
    "One of the things that Jupyter notebooks allow us to do really well is quickly visualize the result of our code. This example is a little bit contrived, but we can ask \"what are the most common number that occurs if you roll two dice?\"\n",
    "\n",
    "Of course, the avid Euro-gamers among you already know the answer is 7 =)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7cb6d9d4-2768-4574-8379-c0f8f1278be4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:12:25.213109Z",
     "iopub.status.busy": "2023-06-23T03:12:25.212991Z",
     "iopub.status.idle": "2023-06-23T03:12:25.329670Z",
     "shell.execute_reply": "2023-06-23T03:12:25.329066Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.213101Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAGdCAYAAADzOWwgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAw7UlEQVR4nO3df3QV9Z3/8dc1P4FNriRpcrlrIriN/EoUDC6CVGCBIBpSy7bURiKtFOnyMwKKLFqiZ00qXYHdRMBwqGGJgH9ULHZtJPEHlA0/g1HACHWNBDAxpo03BOJNSOb7h1/m7DVBIYbMTeb5OGfOYT7znuE9c47yOnM/M+MwDMMQAACAjV1ndQMAAABWIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbIxABAADbC7S6ge6itbVVn376qcLCwuRwOKxuBwAAXAHDMHTu3Dm53W5dd93l7wMRiK7Qp59+qtjYWKvbAAAAHXD69GndcMMNl91OILpCYWFhkr66oOHh4RZ3AwAArkR9fb1iY2PNf8cvh0B0hS79TBYeHk4gAgCgm/m26S5MqgYAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALZHIAIAALbH1+4BQFJlZaVqa2utbuOqREVFKS4uzuo2gB6BQATA9iorKzVo0GA1Nl6wupWr0qtXb334YTmhCOgEBCIAtldbW6vGxgsa+dBKhffrb3U7V6S+6hMd+N1Tqq2tJRABnYBABAD/X3i//oqIG2h1GwAswKRqAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABgewQiAABge5YGoj179mjq1Klyu91yOBx69dVX29SUl5crNTVVTqdTYWFhuuOOO1RZWWlu93q9WrBggaKiotSnTx+lpqbqzJkzPseoq6tTenq6nE6nnE6n0tPT9cUXX1zjswMAAN2FpYHo/PnzuvXWW5Wbm9vu9v/93//VmDFjNGjQIL3zzjt677339OSTTyo0NNSsycjI0I4dO7R9+3bt3btXDQ0NSklJUUtLi1mTlpamsrIyFRYWqrCwUGVlZUpPT7/m5wcAALoHS792P2XKFE2ZMuWy21esWKF77rlHq1atMsduuukm888ej0ebNm3Sli1bNHHiRElSQUGBYmNjVVxcrMmTJ6u8vFyFhYXav3+/Ro4cKUnauHGjRo0apRMnTmjgQL5sDQCA3fntHKLW1lb993//t26++WZNnjxZ0dHRGjlypM/PaqWlpWpublZycrI55na7lZCQoJKSEknSvn375HQ6zTAkSXfccYecTqdZ0x6v16v6+nqfBQAA9Ex+G4hqamrU0NCg3/zmN7r77ru1a9cu/ehHP9K0adO0e/duSVJ1dbWCg4PVt29fn31jYmJUXV1t1kRHR7c5fnR0tFnTnuzsbHPOkdPpVGxsbCeeHQAA8Cd+G4haW1slST/84Q/1yCOPaNiwYXr88ceVkpKiDRs2fOO+hmHI4XCY6//3z5er+brly5fL4/GYy+nTpzt4JgAAwN/5bSCKiopSYGCghgwZ4jM+ePBg8ykzl8ulpqYm1dXV+dTU1NQoJibGrPnss8/aHP/zzz83a9oTEhKi8PBwnwUAAPRMfhuIgoODdfvtt+vEiRM+4ydPntSNN94oSUpKSlJQUJCKiorM7VVVVTp27JhGjx4tSRo1apQ8Ho8OHjxo1hw4cEAej8esAQAA9mbpU2YNDQ366KOPzPWKigqVlZUpIiJCcXFxevTRR/XTn/5Ud911l8aPH6/CwkK99tpreueddyRJTqdTs2bN0pIlSxQZGamIiAgtXbpUiYmJ5lNngwcP1t13363Zs2frhRdekCQ9/PDDSklJ4QkzAAAgyeJAdPjwYY0fP95cX7x4sSRp5syZys/P149+9CNt2LBB2dnZWrhwoQYOHKjf//73GjNmjLnPmjVrFBgYqOnTp6uxsVETJkxQfn6+AgICzJqXXnpJCxcuNJ9GS01Nvey7jwAAgP04DMMwrG6iO6ivr5fT6ZTH42E+EdDDHDlyRElJSZq04kVFxHWPO8d/qzyhomd+odLSUt12221WtwP4rSv999tv5xABAAB0FQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwPQIRAACwvUCrGwDQ81RWVqq2ttbqNq5YeXm51S0AsJilgWjPnj367W9/q9LSUlVVVWnHjh2677772q2dM2eO8vLytGbNGmVkZJjjXq9XS5cu1bZt29TY2KgJEyZo3bp1uuGGG8yauro6LVy4UDt37pQkpaamKicnR9dff/01PDvAniorKzVo0GA1Nl6wupWr1uxtsroFABaxNBCdP39et956q37xi1/on//5ny9b9+qrr+rAgQNyu91ttmVkZOi1117T9u3bFRkZqSVLliglJUWlpaUKCAiQJKWlpenMmTMqLCyUJD388MNKT0/Xa6+9dm1ODLCx2tpaNTZe0MiHViq8X3+r27kiVUf36djOPF28eNHqVgBYxNJANGXKFE2ZMuUba86ePav58+frjTfe0L333uuzzePxaNOmTdqyZYsmTpwoSSooKFBsbKyKi4s1efJklZeXq7CwUPv379fIkSMlSRs3btSoUaN04sQJDRw48NqcHGBz4f36KyKue/z3VV/1idUtALCYX0+qbm1tVXp6uh599FENHTq0zfbS0lI1NzcrOTnZHHO73UpISFBJSYkkad++fXI6nWYYkqQ77rhDTqfTrAEAAPbm15Oqn332WQUGBmrhwoXtbq+urlZwcLD69u3rMx4TE6Pq6mqzJjo6us2+0dHRZk17vF6vvF6vuV5fX9+RUwAAAN2A394hKi0t1X/8x38oPz9fDofjqvY1DMNnn/b2/3rN12VnZ8vpdJpLbGzsVfUAAAC6D78NRH/+859VU1OjuLg4BQYGKjAwUKdOndKSJUvUv39/SZLL5VJTU5Pq6up89q2pqVFMTIxZ89lnn7U5/ueff27WtGf58uXyeDzmcvr06c47OQAA4Ff8NhClp6fr/fffV1lZmbm43W49+uijeuONNyRJSUlJCgoKUlFRkblfVVWVjh07ptGjR0uSRo0aJY/Ho4MHD5o1Bw4ckMfjMWvaExISovDwcJ8FAAD0TJbOIWpoaNBHH31krldUVKisrEwRERGKi4tTZGSkT31QUJBcLpf5ZJjT6dSsWbO0ZMkSRUZGKiIiQkuXLlViYqL51NngwYN19913a/bs2XrhhRckffXYfUpKCk+YAQAASRYHosOHD2v8+PHm+uLFiyVJM2fOVH5+/hUdY82aNQoMDNT06dPNFzPm5+eb7yCSpJdeekkLFy40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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# simulate rolling many times\n",
    "many_rolls = [roll_n_dice(n_dice=2) for _ in range(10000)]\n",
    "sns.histplot(many_rolls, binwidth=1);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "300751cb-25ac-4d80-a1a3-62458e56ddf8",
   "metadata": {},
   "source": [
    "Let's suppose we were making a game of our own that is based on die rolls.\n",
    "\n",
    "We might be curious if rolling 20 d6s (d6=a 6-sided die), and 6 d20s (d20=a 20-sided die)  in terms of results of the rolls. Can we just swap them interchangably?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b22efe30-2711-4f3b-97f7-1413a996a039",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:17:36.431295Z",
     "iopub.status.busy": "2023-06-23T03:17:36.430169Z",
     "iopub.status.idle": "2023-06-23T03:17:36.751767Z",
     "shell.execute_reply": "2023-06-23T03:17:36.736622Z",
     "shell.execute_reply.started": "2023-06-23T03:17:36.431254Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: ylabel='Count'>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "outcomes_roll_20_d6 = [roll_n_dice(n_dice=20) for _ in range(10000)]\n",
    "sns.histplot(outcomes_roll_20_d6, binwidth=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2d9b115f-02d0-42d1-837e-bb89342006e4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:12:25.515214Z",
     "iopub.status.busy": "2023-06-23T03:12:25.515094Z",
     "iopub.status.idle": "2023-06-23T03:12:25.653938Z",
     "shell.execute_reply": "2023-06-23T03:12:25.653600Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.515204Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: ylabel='Count'>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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sHN5vc5lFy5c0NGjR1VcXNzgAaEAAAB2albYWb9+vd/2zMxMnT179oYKAgAACKRmPxvLn8cee0xDhgzRP/7jPwbyYwEANig6fownocMIAQ07//M//6OOHTsG8iMBADbhSegwRbPCztSpU31eW5al8vJyHTlyRM8++2xACgMAAAiEZoWd6Ohon9ft2rXTHXfcoVWrVik1NTUghQEAAARCs8LOli1bAl0HAABAi7ihNTuFhYU6efKkHA6H+vTpowEDBgSqLgAAgIBoVtiprKzUr371K+3fv1833XSTLMtSdXW1Ro0apdzcXN18882BrhMAAKBZmvW4iLS0NLndbp04cULffvutqqqqVFxcLLfbrWeeeSbQNQIAADRbs0Z29uzZo3379unOO+/0tvXp00f//M//zAJlAAAQUpo1slNfX6/w8PAG7eHh4aqvr7/hogAAAAKlWWFn9OjRmjdvnr766itvW1lZmX77299qzJgxASsOAADgRjUr7OTk5Kimpka33nqrbrvtNt1+++1KSkpSTU2NNm7cGOgaAQAAmq1ZYScxMVEffPCB3nzzTaWnp+uZZ57RW2+9pcLCQvXo0aPJn/P+++9r0qRJSkhIkMPh0Ouvv+6z/4knnpDD4fDZ7rnnHp8+Ho9HaWlpio2NVefOnTV58mSdPn26OYcFAAAMdF1h591331WfPn3kdrslSePGjVNaWpqeeeYZDR48WHfddZf+67/+q8mfd+7cOfXr1085OTmN9nnggQdUXl7u3d566y2f/enp6dq1a5dyc3N14MABnT17VhMnTtSlS5eu59AAAIChrutqrA0bNug3v/mNoqKiGuyLjo7W7NmztW7dOv3sZz9r0udNmDBBEyZMuGofp9Mpl8vld191dbU2b96sV199VWPHjpUkbd++XYmJidq3b5/Gjx/fpDoAAIC5rmtk59ixY3rggQca3Z+amqrCwsIbLurH9u/fr27duql37976zW9+o8rKSu++wsJCXbhwwedy94SEBKWkpKigoCCgdQAAgNbpukZ2vv76a7+XnHs/LCxMf/3rX2+4qMsmTJighx9+WD179lRJSYmeffZZjR49WoWFhXI6naqoqFCHDh3UpUsXn/fFxcWpoqKi0c/1eDzyeDze15en5QAAgHmuK+x0795dRUVFuv322/3uP378uOLj4wNSmCRNnz7d+98pKSka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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "N_SIDES = 20  # change to 20 sided dice\n",
    "\n",
    "outcomes_roll_6_d20 = [roll_n_dice(n_dice=6) for _ in range(10000)]\n",
    "sns.histplot(outcomes_roll_6_d20, binwidth=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8fc1da8-27f1-423c-85f1-d2055d2102cb",
   "metadata": {},
   "source": [
    "We can compare these on the same axis:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "915bec4f-fdf7-42db-8531-242cf01b985f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-23T03:13:25.724137Z",
     "iopub.status.busy": "2023-06-23T03:13:25.723637Z",
     "iopub.status.idle": "2023-06-23T03:13:25.959961Z",
     "shell.execute_reply": "2023-06-23T03:13:25.957267Z",
     "shell.execute_reply.started": "2023-06-23T03:13:25.724111Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGdCAYAAAD0e7I1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4SklEQVR4nO3de1yVZb7//zcCLlABFZKDUmFhqWg5UI1oow1K04zTwcqmrHSnk+WRsNHQUuKhoDYZpqNtG1MnY2i+j7Rt+zeVaKnb7bg18oCH1Iw8EAxlBKicuX9/NK5pyUKRw7oXN6/n47Eej9Z1X2utz+LWeHvd131dHoZhGAIAALCodmYXAAAA0JIIOwAAwNIIOwAAwNIIOwAAwNIIOwAAwNIIOwAAwNIIOwAAwNIIOwAAwNK8zC7AHdTW1uqbb76Rn5+fPDw8zC4HAAA0gGEYKi0tVVhYmNq1q3/8hrAj6ZtvvlF4eLjZZQAAgEY4ffq0evToUe9xwo4kPz8/ST/+sPz9/U2uBgAANERJSYnCw8Ptv8frQ9iR7Jeu/P39CTsAALQyV5qCwgRlAABgaYQdAABgaYQdAABgaczZAQC0WoZhqLq6WjU1NWaXghbg6ekpLy+vJi8LQ9gBALRKlZWVys/P14ULF8wuBS2oQ4cOCg0NVfv27Rv9HoQdAECrU1tbq9zcXHl6eiosLEzt27dnUViLMQxDlZWV+vbbb5Wbm6vIyMjLLhx4OYQdAECrU1lZqdraWoWHh6tDhw5ml4MW4uvrK29vb508eVKVlZXy8fFp1PswQRkA0Go19l/6aD2a4xzzpwQAAFgaYQcAAFgac3YAAJYx7YU5yvuuxGWf1z3IX0sWpLjs8y5KTk7W+++/r3379pn+2WPHjtUPP/yg999/3+W1NBRhBwBgGXnflcjr9kdc93m737361+TlaebMmfrwww9VVlamXr16adWqVYqOjm50HW+++ab+8pe/6ODBg5Kk6Ohopaam6vbbb3fot3z5cr3yyivKz89X3759lZ6erjvvvLPRnytJS5YskWEYTXqPlsZlLAAAXKSoqEiDBg2St7e3PvzwQx0+fFivvvqqOnfu3KT33bp1qx599FF9+umn+sc//qFrr71W8fHxysvLs/d59913lZCQoNmzZ2vv3r268847dc899+jUqVNN+uyAgIAm19/SCDsAALjIwoULFR4ertWrV+v222/X9ddfr7i4ON1www2Xfd2CBQsUHBwsPz8/jRs3TuXl5Q7H33nnHU2cOFG33nqrbr75Zr355puqra3Vli1b7H0WL16scePGafz48erdu7fS09MVHh6uFStWNOmzx44dq/vvv9/+vLa2VgsXLtSNN94om82ma6+9VvPnz7cfz8vL0yOPPKIuXbooMDBQ9913n77++usr/OSahrADACZJTZqqOU8/4PBITZpqdlloQRs3blRMTIwefvhhdevWTQMGDNCbb7552df87W9/09y5czV//nx99tlnCg0N1fLlyy/7mgsXLqiqqkpdu3aV9OO6RNnZ2YqPj3foFx8fr507dzbrZyclJWnhwoV66aWXdPjwYWVkZCg4ONhe11133aVOnTpp+/bt2rFjhzp16qRf/epXqqysvOz7NgVzdgDAJOVnTysltsqhbc7O0yZVA1f46quvtGLFCiUmJmrWrFnavXu3pk6dKpvNpieffNLpa9LT0/XUU09p/PjxkqR58+Zp8+bNdUZYfuqFF15Q9+7dNWzYMEnSd999p5qaGnvouCg4OFgFBQX1vs/VfnZpaamWLFmiZcuWacyYMZKkG264QYMHD5YkZWZmql27dvrzn/9sX/F69erV6ty5s7Zu3VonjDUXRnYAAHCR2tpa/exnP1NqaqoGDBigCRMm6Pe///1lLyUdOXJEAwcOdGi79PlPLVq0SH/961+1fv36OisOX7qlhmEYl91m42o/+8iRI6qoqFBcXJzT49nZ2fryyy/l5+enTp06qVOnTuratavKy8t14sSJet+3qRjZAQDARUJDQ9WnTx+Htt69e+u9995rlvf/4x//qNTUVG3evFn9+/e3twcFBcnT07POKE5hYWGd0Z6m8PX1vezx2tpaRUdH65133qlz7Jprrmm2Oi5F2AGAZpaaNFXlZx0vR/kEhmtW2usmVQR3MWjQIB09etSh7dixY7ruuuvqfU3v3r21a9cuh8tcu3btqtPvlVde0bx58/Txxx8rJibG4Vj79u0VHR2trKwsPfDAA/b2rKws3XfffU3+7IsiIyPl6+urLVu22C99/dTPfvYzvfvuu+rWrZv8/f3rfZ/mRtgBgGbGXBzU57nnnlNsbKxSU1M1atQo7d69WytXrtTKlSvrfc20adM0ZswYxcTEaPDgwXrnnXd06NAh9ezZ095n0aJFeumll5SRkaHrr7/ePoJz8VKRJCUmJuqJJ55QTEyMBg4cqJUrV+rUqVN65plnmvTZP+Xj46OZM2dqxowZat++vQYNGqRvv/1Whw4d0rhx4zR69Gi98soruu+++5SSkqIePXro1KlTWr9+vf7whz+oR48ejfmxXhFhBwDcyL79OZrz9AMObYwKNVz3IP9GLfTXlM+7Grfddps2bNigpKQkpaSkKCIiQunp6Ro9enS9r3nkkUd04sQJzZw5U+Xl5XrwwQf17LPP6uOPP7b3Wb58uSorK/XQQw85vHbu3LlKTk62v8/Zs2eVkpKi/Px8RUVF6e9///tlR5Ua8tmXeumll+Tl5aU5c+bom2++UWhoqD1QdejQQdu3b9fMmTM1cuRIlZaWqnv37oqLi2vRkR4Pw92XPXSBkpISBQQEqLi42KXDagCsac7TDzgZ2fFWysoNV+z38Ip9+n/P3nrF17Z15eXlys3NVURERJ1JuLCWy53rhv7+NvVurOTkZHl4eDg8QkJC7McNw1BycrLCwsLk6+uroUOH6tChQw7vUVFRoSlTpigoKEgdO3bUvffeqzNnzrj6qwAAADdl+mWsvn37avPmzfbnnp6e9v9etGiRFi9erDVr1qhXr16aN2+ehg8frqNHj8rPz0+SlJCQoA8++ECZmZkKDAzU9OnTNWLECGVnZzu8FwC0BGeTkY8dzpFib3Zoc3Z5ylk/AM3P9LDj5eXlMJpzkWEYSk9P1+zZszVy5EhJ0tq1axUcHKyMjAxNmDBBxcXFWrVqld5++237wknr1q1TeHi4Nm/erLvvvtul3wVA2+NsMvLD++suuGZTeYP6AWh+pi8qePz4cYWFhSkiIkK/+93v9NVXX0mScnNzVVBQ4LCaos1m05AhQ+xLW2dnZ6uqqsqhT1hYmKKioi67/HVFRYVKSkocHgAAwJpMHdm544479Je//EW9evXSP//5T82bN0+xsbE6dOiQ/bY5Z0tbnzx5UpJUUFCg9u3bq0uXLnX6XG7567S0NL388svN/G0AoGVwhxbQNKaGnXvuucf+3/369dPAgQN1ww03aO3atfr5z38u6eqXtm5In6SkJCUmJtqfl5SUKDw8vDFfAQBanLNLYKzbAzSc6Zexfqpjx47q16+fjh8/bp/Hc7mlrUNCQlRZWamioqJ6+zhjs9nk7+/v8AAAANbkVmGnoqJCR44cUWhoqCIiIhQSEqKsrCz78crKSm3btk2xsbGSpOjoaHl7ezv0yc/P18GDB+19AABA22Zq2Hn++ee1bds25ebm6v/+7//00EMPqaSkRGPGjJGHh4cSEhKUmpqqDRs26ODBgxo7dqw6dOigxx57TJIUEBCgcePGafr06dqyZYv27t2rxx9/XP369bPfnQUAQFs0duxY3X///c3+vsnJybr11ltb/HOak6lzds6cOaNHH31U3333na655hr9/Oc/165du+xLV8+YMUNlZWWaOHGiioqKdMcdd2jTpk32NXYk6bXXXpOXl5dGjRqlsrIyxcXFac2aNayxAwBtkLN1j1rS1U4UT0tL0/r16/XFF1/I19dXsbGxWrhwoW666SZ7H8Mw9PLLL2vlypX2331/+tOf1Ldv3ybXm5eXp5kzZ+rDDz9UWVmZevXqpVWrVik6OrrR77lkyRK5+2YMpoadzMzMyx738PBQcnKyfV8PZ3x8fLR06VItXbq0masDALQ2ztY9aklXO1F827ZtmjRpkm677TZVV1dr9uzZio+P1+HDh9WxY0dJDVtQtzGKioo0aNAg3XXXXfrwww/VrVs3nThxQp07d270e0o/XmVxd241ZwcAACv76KOPNHbsWPXt21e33HKLVq9erVOnTik7O1tS3QV1o6KitHbtWl24cEEZGRn1vm9NTY0SExPVuXNnBQYGasaMGXVGWxYuXKjw8HCtXr1at99+u66//nrFxcXphhtuuGzNCxYsUHBwsPz8/DRu3DiVlzsuhnnpZaza2lotXLhQN954o2w2m6699lrNnz/ffjwvL0+PPPKIunTposDAQN133336+uuvG/gTbBzCDgA4kZo0VXOefsDhkZo01eyyYDHFxcWSpK5du0pq2IK6zrz66qt66623tGrVKu3YsUPff/+9Nmxw3Dx248aNiomJ0cMPP6xu3bppwIABevPNNy9b39/+9jfNnTtX8+fP12effabQ0FAtX778sq9JSkrSwoUL9dJLL+nw4cPKyMiw3yF94cIF3XXXXerUqZO2b9+uHTt2qFOnTvrVr36lysrKy75vU5i+XQQAuCNnl0NY2wbNyTAMJSYmavDgwYqKipKkBi2o60x6erqSkpL04IMPSpLeeOMNffzxxw59vvrqK61YsUKJiYmaNWuWdu/eralTp8pms+nJJ5+s932f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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.histplot(outcomes_roll_6_d20, binwidth=1, label=\"6 d20 dice\")\n",
    "sns.histplot(outcomes_roll_20_d6, binwidth=1, label=\"20 d6 dice\")\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f0209f4e-751b-4c10-9d90-e9ed6100a2e0",
   "metadata": {
    "execution": {
     "iopub.status.busy": "2023-06-23T03:12:25.896051Z",
     "iopub.status.idle": "2023-06-23T03:12:25.896538Z",
     "shell.execute_reply": "2023-06-23T03:12:25.896425Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.896417Z"
    }
   },
   "outputs": [],
   "source": [
    "# Let's redefine the function\n",
    "def roll_n_dice(n_dice: int, n_sides: int = 6) -> int:\n",
    "    \"\"\"Rolls n_dice dice, each die has n_sides, and returns the total\"\"\"\n",
    "    rolls = [random.randint(1, n_sides) for _ in range(n_dice)]\n",
    "    return sum(rolls)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c15a7c49-959b-4c65-ab02-0dad8e15ce3c",
   "metadata": {},
   "source": [
    "As a benefit, our code is a lot more explicit when asking what the difference is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5afb3a01-0fb2-4da6-b5eb-15553547fd9b",
   "metadata": {
    "execution": {
     "iopub.status.busy": "2023-06-23T03:12:25.896998Z",
     "iopub.status.idle": "2023-06-23T03:12:25.897228Z",
     "shell.execute_reply": "2023-06-23T03:12:25.897112Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.897103Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "outcomes_roll_20_six_sided_dice = [\n",
    "    roll_n_dice(n_dice=20, n_sides=6) for _ in range(10000)\n",
    "]\n",
    "outcomes_roll_6_twenty_sided_dice = [\n",
    "    roll_n_dice(n_dice=6, n_sides=20) for _ in range(10000)\n",
    "]\n",
    "\n",
    "sns.histplot(outcomes_roll_6_twenty_sided_dice, binwidth=1, label=\"6 twenty-sided die\")\n",
    "sns.histplot(outcomes_roll_20_six_sided_dice, binwidth=1, label=\"20 six-sided die\")\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c160862-301c-4fee-b24b-c6b0decae877",
   "metadata": {},
   "source": [
    "## Getting the best of both worlds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d0768e5d-5459-490d-b9bf-ff6ac8e9b5fa",
   "metadata": {
    "execution": {
     "iopub.status.busy": "2023-06-23T03:12:25.899129Z",
     "iopub.status.idle": "2023-06-23T03:12:25.899950Z",
     "shell.execute_reply": "2023-06-23T03:12:25.899830Z",
     "shell.execute_reply.started": "2023-06-23T03:12:25.899820Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import dice\n",
    "\n",
    "outcomes_roll_20_six_sided_dice = [dice.roll_n_d6(n_dice=20) for _ in range(10000)]\n",
    "outcomes_roll_6_twenty_sided_dice = [\n",
    "    dice.roll_n_dice(n_dice=6, n_sides=20)\n",
    "    for _ in range(\n",
    "        10000\n",
    "    )  # can also use dice.roll_n_d20, but showing we can be flexible in the notebook\n",
    "]\n",
    "\n",
    "sns.histplot(outcomes_roll_6_twenty_sided_dice, binwidth=1, label=\"6 twenty-sided die\")\n",
    "sns.histplot(outcomes_roll_20_six_sided_dice, binwidth=1, label=\"20 six-sided die\")\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d22f3ff3-2fd2-40f7-8d39-70f488253591",
   "metadata": {},
   "source": [
    "We can now make our observations about the output (e.g. mean is higher for the 20 d6s, and the outputs are more tightly clumped).\n",
    "\n",
    "This allows us to use notebooks for what they excel at -- mixing explanations, exploration, and visualizations -- while allowing us to continue using the same tools and software design principles for the functions and logic we are using."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6ca4508e-56d3-467e-b508-3925b8f0a21c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
